package gjbsh.bangong.ds.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import gjbsh.bangong.ds.dao.单位流动站Mapper;
import gjbsh.bangong.ds.model.单位流动站;
import gjbsh.bangong.ds.model.单位流动站Example;
import gjbsh.support.DateUtil;

/**
 * @author yaolongjun
 * @date   2020年5月19日 下午3:30:08
 */
@Service
public class 单位流动站Service {

	@Autowired
	单位流动站Mapper ddMapper;
	
	// 根据单位ID查询单位流动站
	private List<单位流动站> findByDeptId(String ppDeptId) {
		单位流动站Example mmExample = new 单位流动站Example();
		单位流动站Example.Criteria criteria = mmExample.createCriteria();
		criteria.and单位idEqualTo(ppDeptId);
		return ddMapper.selectByExample(mmExample);
	}

	// 根据单位ID查询单位流动站
	public List<Map<String, Object>> findDeptLiudongzhanByDeptId(String ppDeptId, String ppDeptId2) {
		return ddMapper.findDeptLiudongzhanByDeptId(ppDeptId,ppDeptId2);
	}

	// 根据单位ID查询一级学科中本单位的流动站
	public List<Map<String, Object>> findYijixuekeLiudongzhanByDeptId(String ppDeptId) {
		return ddMapper.findYijixuekeLiudongzhanByDeptId(ppDeptId);
	}
	
	// 新增
	public boolean add(单位流动站 mmDeptLiudongzhan) {
		return ddMapper.insert(mmDeptLiudongzhan) == 1;
	}
	
	// 修改
	public boolean modify(单位流动站 mmDeptLiudongzhan) {
		return ddMapper.updateByPrimaryKey(mmDeptLiudongzhan) == 1;
	}
	
	// 根据单位ID和一级学科ID删除
	public boolean deleteByDeptIdAndYijixuekeId(String ppDeptId, String mmYijixuekeid) {
		单位流动站Example mmExample = new 单位流动站Example();
		单位流动站Example.Criteria criteria = mmExample.createCriteria();
		criteria.and一级学科idEqualTo(mmYijixuekeid).and单位idEqualTo(ppDeptId);
		return ddMapper.deleteByExample(mmExample) > 0;
	}

	// 更新单位_流动站
	@Transactional
	public boolean updateDeptLiudongzhan(String ppDeptId, String ppDeptliudongzhanids) {
		String[] mmYijixuekeArr = ppDeptliudongzhanids.split(",");
		// 新一级学科list
		List<String> mmNewYijixuekeList = Arrays.asList(mmYijixuekeArr);
		if(mmNewYijixuekeList.size() > 0) {
			// 查询原有的单位_流动站
			List<单位流动站> mmOldDeptLiudongzhanList = findByDeptId(ppDeptId);
			
			// 原一级学科list
			List<String> mmOldYijixuekeList = new ArrayList<String>();
			for(int i = 0; i < mmOldDeptLiudongzhanList.size(); i++) {
				单位流动站 mmOldDeptLiudongzhan = mmOldDeptLiudongzhanList.get(i);
				if(mmOldDeptLiudongzhan != null) {
					String mmYijixuekeid = mmOldDeptLiudongzhan.get一级学科id();
					mmOldYijixuekeList.add(mmYijixuekeid);
				}
			}
			
			// 将原来没有的新增进去
			单位流动站 mmDeptLiudongzhan = new 单位流动站();
			for(int j = 0; j < mmNewYijixuekeList.size(); j++) {
				String mmNewYijixuekeid = mmNewYijixuekeList.get(j);
				if(!"".equals(mmNewYijixuekeid) && (mmOldYijixuekeList.size() == 0 || !mmOldYijixuekeList.contains(mmNewYijixuekeid))) {
					mmDeptLiudongzhan.set单位流动站id(UUID.randomUUID().toString());
					mmDeptLiudongzhan.set单位id(ppDeptId);
					mmDeptLiudongzhan.set一级学科id(mmNewYijixuekeid);
					
					
					Calendar date = Calendar.getInstance();
					mmDeptLiudongzhan.set建站年份(BigDecimal.valueOf(date.get(Calendar.YEAR)));
					String mmBeizhu = DateUtil.getDate_CN(new Date()) + " 增加";
					mmDeptLiudongzhan.set备注(mmBeizhu);
					if(!add(mmDeptLiudongzhan)) {
						throw new RuntimeException("增加单位流动站失败");
					}
				}
			}
			
			// 将原有，但现在没有的删除
			for(int m = 0; m < mmOldYijixuekeList.size(); m++) {
				String mmOldYijixuekeid = mmOldYijixuekeList.get(m);
				if(!"".equals(mmOldYijixuekeid) && !mmNewYijixuekeList.contains(mmOldYijixuekeid)) {
					if(!deleteByDeptIdAndYijixuekeId(ppDeptId,mmOldYijixuekeid)) {
						throw new RuntimeException("删除单位流动站失败");
					}
				}
			}
		}
		return true;
	}

	// 统计所有省份的学科设站情况
	public List<Map<String, Object>> statisticsDeptLiudongzhanOfAllSheng() {
		return ddMapper.statisticsDeptLiudongzhanOfAllSheng();
	}

	// 统计某省份学科设站情况
	public List<Map<String, Object>> statisticsDeptLiudongzhanBySheng(String ppShengfenId) {
		return ddMapper.statisticsDeptLiudongzhanBySheng(ppShengfenId);
	}

	// 统计该省份地区的学科设站情况
	public List<Map<String, Object>> statisticsDeptLiudongzhanByShengfenIdAndDiquId(String ppShengfenId,
			String ppDiquId) {
		return ddMapper.statisticsDeptLiudongzhanByShengfenIdAndDiquId(ppShengfenId,ppDiquId);
	}

	// 根据单位ID统计该单位的学科设站情况
	public List<Map<String, Object>> statisticsDeptLiudongzhanByDeptId(String ppDeptId) {
		return ddMapper.statisticsDeptLiudongzhanByDeptId(ppDeptId);
	}

	// 根据单位ID查询单位流动站(去除下级单位流动站) 
	public List<Map<String, Object>> findDeptLiudongzhanExceptXjLdzByDeptId(String ppDeptId) {
		return ddMapper.findDeptLiudongzhanExceptXjLdzByDeptId(ppDeptId);
	}

	// 根据单位ID查询单位流动站信息
	public List<Map<String, Object>> findCustomByDeptId(String ppDeptId) {
		return ddMapper.findCustomByDeptId(ppDeptId);
	}

	// 根据单位id和一级学科id查询单位流动站
	public List<单位流动站> findByDeptIdAndYijixuekeId(String ppDeptId, String ppYijixuekeId) {
		单位流动站Example mmExample = new 单位流动站Example();
		单位流动站Example.Criteria criteria = mmExample.createCriteria();
		criteria.and单位idEqualTo(ppDeptId).and一级学科idEqualTo(ppYijixuekeId);
		return ddMapper.selectByExample(mmExample);
	}

	// 按省份计算所有学科设站个数
	public List<Map<String, Object>> countDeptLiudongzhanGroupbySheng(List<String> mmShengIdList) {
		return ddMapper.countDeptLiudongzhanGroupbySheng(mmShengIdList);
	}
	
	
}
